{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Regression\n",
    "\n",
    "Machine learning is about using data to infer patterns.\n",
    "\n",
    "Linear regression is the basic unit of Deep Learning. In fact personally I prefer to think of it as stacking linear regression modules.\n",
    "\n",
    "Deep Learning has proven itself over and over again to be far superior to traditional machine learning techiques. It's strength comes from the fact that it can be scalable to large amounts of data. \n",
    "\n",
    "Some of the most impressive applications are in voice recognition, self driving cars and in chatbots.\n",
    "\n",
    "If you are finding this tutorial challenging try playing around with https://www.blog.google/topics/machine-learning/now-anyone-can-explore-machine-learning-no-coding-required/ (and make sure you watch the video as well) . For a bit more mathematical take, try reading: https://ml.berkeley.edu/blog/2016/11/06/tutorial-1/. Also watch the "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgHBwgICAgHBwcHCAgHBwcHBwgIBwcH\nBwcHChALBwgOCQcHDRUNDhEdHx8fBwsWGBYeGBAeHx4BBQUFCAcIDwkJDRUNDQ0SEhISFRUVEhUV\nEhISEhISEhUSFRISFRUSFRIVEhIVEhISEhIVEhISEhISFRUVFRUVFf/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAABBAMBAQAAAAAAAAAAAAAAAQIEBQMGCAkH/8QAWRAAAQIDAwQMCAsEBgcJAAAAAAEC\nAwQFBhExGCFVcQcSQYGUpbGywdPU1QgTIjJygpXRCRQjNkJRVGF1tMIXM4WRFSVDU1ahJCY1RWXD\n8BY0REZSZIOz8f/EABwBAAICAwEBAAAAAAAAAAAAAAAGAgUBAwQHCP/EAD4RAAIBAgMEBQoEBgEF\nAAAAAAABAgMEBRExBiFxkRITMlHhFSI1QUJTcpKx0QdSYWIUIzNDofCBFhckNHP/2gAMAwEAAhED\nEQA/AOMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTLJcsJoLjOsdtDJcsJoLjOs\ndtADzNA9Ml8Fywmg+M6x20E8Fywmg+M6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcs\nJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20MlywmguM6x20APM0D0yyXLCaC4zrHbQyXLCaC\n4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20MlywmguM6x20APM0D0yyX\nLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20Mlywm\nguM6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzNA9Ms\nlywmguM6x20MlywmguM6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcs\nJoLjOsdtADzNA9MslywmguM6x20MlywmguM6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPT\nLJcsJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20MlywmguM6x20APM0D0yyXLCaC4zrHbQyX\nLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20MlywmguM6x20APM0D\n0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzNA9MslywmguM6x20M\nlywmguM6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA8zQPTLJcsJoLjOsdtDJcsJoLjOsdtADzN\nA9MslywmguM6x20MlywmguM6x20APM0D0yyXLCaC4zrHbQyXLCaC4zrHbQA+zAAAB8y2e5mcdKrJ\nw5GozNPjSk7FqUxT/E7drYML5CTd42PDdDZEc5XOe2/NAc3FxnsXaNZSx0rU1lY6LKUVsx8VjqyF\nFiJKy9/nMc9rWvSHtkW/ByXofRIjEcitciOa5Fa5rkRWuaqXK1yLmVFRVzfeajsvQWQ7N1mHDa2G\nxlJnWsYxqMYxrZZ6Na1rczWoiYIYehmKzeR8mkvCRmYrWubZ51z0RUvqUJPORFT+x+8sIGz3PPws\n8mN2eqQk/wCQfCrO/uYPow+a02+k/qQ85u9qbum2l0d36eJ69W2IsIwUl0tM9fA+pQtmmpuws8zG\n7PVYXZybC2Vqw7Cz0LG7/a0Ps/3mjU9OVOg2eQ/V7ihuNu8Qhoo8vEX7rZu1p6Z8/AvYeyNXHYWe\nge2IfZiR/wBu6/8A4dl/bMPswyQwdvFuhVf9x8T6WWUOXiLF9Y06PZzKCT2Sq3F8btLOwfkoz5d9\n9Xhp8pD2quu/0bO3ykzmb9odd/w7A9sQuzEyBKMheM2ibXxsV8aJnVb4j7ts7Ph5qDIgwWu2t9V/\nLy8RVu7udPQhrsj1z/DsD2xD7MMXZLrf+HoPteH2czxCNEGizx24q5dLLkLV1tBc09MuQi7J9a/w\n7B9rwuzjV2U6z/h2F7XhdnMTyPEGe1rSqai7c7Z31PTo8vEfE2Yaq2M2Atnmbd8OJGb/AFtC2u0h\nOhsdevxfMt8Vn+YsXZgqrcbPQ8bv9rQuzldGl2LEbFu+Uax8Jq/UyI5jnJdrhs/kV9R/Uo0WWHUq\nrylmUtb8RMRjl0VH9d3r5lxE2bKk3GzzPqzVWF2cjP2ep5MbPJ9X+1IXUGqzq5l1lHNbusZKOzNr\nLXpc/A30Nv8AEZ6qHJ/c3+J4Qk43Gz+H1VOF1BHieEjMtxs87N/xKF1J8vnPpayonN3WWdLY6ylr\n0ufgW9HbG+nr0eXifXJvwn4sJNs6z8S5Fa3NUYS53uRqf2P1qhjieFK9t99n4mb/AIjC6k+G1NqO\nRUXOl7V32qjk/wA0QrJlcTvpbCWEnvcsuPgW9HaW5klnlnw8T79E8LBW42fjZvqqELqjA/wukT/y\n/Hzf+/g9Uc5Te7vFZMriWVP8O8Ml+fn4FnSxqvLVI6ad4YTExs9McPg9WY18MmDoCY4dC6o5WmVx\n/wCvqIEXE7YfhnhT9c+a+xY07+pLXI64yyoOgJjh0LqhqeGbA0BMZlu/79C6o5FUYprrfhrhcWsn\nPL1+cvsbleTOvV8M2BoCY4dC6oTLOgaAmOGwuqOQHDHHDV/D7DY6OfNfYkrqZ2DloS+gJnhsLqhM\ntCX0BM8NhdUceqNU4Kmw2Hx9cufgSVzM7Dy0pfQEzw2F1QmWnLYf0BM8NhdUcdKIqHFU2Nslo5c/\nAmriR2Nlpy2gJnhsLqgy1JbQEzw2F1RxuIaJbJ2a9cufgZ6+R2TlqS2gJnhsLqhMtWW0BM8NhdUc\nbKIaXstafu5+AdfI7Ky1ZbQEzw2F1QL4a0toCZ4bC6o41A1S2Xtctzlz8CXXSOystWW0BM8NhdUG\nWrLaAmeGwuqONQJf9MWn7ufgY66R2Vlqy2gJnhsLqhctSW0BM8NhdUcaDia2WtP3c/Ax18jsnLUl\ntATPDYXVC5actoCZ4bC6o42QDdHZKzf5ufgHXyOyG+GnLL/uCZ4bC6odlpS+gJnhsLqjjdo5Dopb\nG2TW9yz4+BF3EjsbLRl9ATPDYXVC5Z8voCZ4bC6o46Qch209hsPlq5c/Ai7mZ2JlnQNATPDYXVC5\nZsDQExw6F1Rx6g9Dvpfh7hstXPmvsRd3M9FvB82Zm2tWf2lPfT0kfEIqvjtjrEWOkRcGsTa3eL/z\nPrJyR8HfhX/SkObMHW55FjVnC0vatCn2YSaWfcd9OXSim/WAABVkwAAAAAAAANS2Zfm7XPwqe/Lx\nDbTUtmX5u1z8Knvy8Qw9CUO0uJyBZ5PkYPow+a026kY+shqVnf3EH0YfNabbSsfWQ8UxDtS4s+jb\nn+kuC+hssh0p0GzyH6vcazIJzk6DZpD9SdAo3gnX5sklulqhVSW6WqC/7Yi4poYYhFiEqIRYg34Z\n/v8Ak8/xEjxCM8kvIzz0HDvUI9+R3keIZ3mCIPdh6hMvSPEKqo/qUtYhVVH9Sj3hfaQqV9Sind3W\nUs10l1ObuspJ3BdY72x32hTzn0tZTTq5l1lzN7uspZz6WsvbcY7UqZzd3uQqZvdLac3d7kKmb3S7\noDDbeoqpnBSsmsVLOZXErJrFS3oF9blZNbpBi4k6a3SDFx3i0paFzR0MajHD1GONdxodKGKMcPUY\n4pa5sQ1RrhVGlTWZNDRBRCuqE0NEFEOGoTQiiCqIc0jIAAGsyAAAAAqCCobIswKgqCCodMTDHIOa\nNQVDupEGPQcgxB6FlRIMc0egxo9C2o6GtnXPwd2Ff9KQ5swdbnJHwd2Ff9KQ5swdbnzptP6Ur/Gy\n3o9hcAAAKE2gAAAAAAAGrbJLJlJVI0tHq8JYSqroVFgSUxNx9slzfIn2OarGqiqqJcuc1ap1aPPW\nFnJqZiQo0xGoU46YiQU2jFjJAiseisVE8W9FaqObuKjkN4tNZ9J7xa/HKjJLDSI2+QmPi/jGxdrt\nkiorXI7zEuXFL1uXOa5sh0aXp9k6tJyrPFQIFInmQ2q5XuzwIrnOe96q573Oc5yuXFXKph6Eodpc\nTkqys4x8KE1vjL0axV20KKxMGp5z2oim60vH1k6DUbOfuYPow+a026lLn9ZDxXEsunLLvZ9FV8+q\nWfcjZqfhv+42WQ/UnQa1T1zet7jZZD9SdAoXgoX5sklulqhVSW6WqC/7YjYpoYYhFiEqIRYg34Z/\nv+Tz/ESO8jPJLyM89Bw71CPfkZ5giGd5giD3YeoS70jxCqqP6lLWIVVR/Uo94X2kKtfUop3d1lHO\n4b5eTu7rKOdw3x4tjvsyom93WUs59LWXU3u6ylnPpay8txktSpnN3e5Cpm90tpzd3uQqZvdLugMF\nt6ipmd0rZrFSymUxK2axUuKJfUCsmt0gRcSfNbpBi47xZ0tC5o6GNRjh6jHGu40OlDFGOHqMcUtc\n2IY4aOcNKisTQ0QUQr6hNDRBRDhqE0IogqiHNIyAABrMgAAAAKggqE4mBRUEFQ6o6mGOQVBEFQ7a\nZBjmj0GNHoWdEgx7R14xo9C1pZ5biDOufg7VvSv+nIfd9GY+s63OSPg7sK/6UhzZg63PnTabPynX\nz16bLaj2EAABRG0AAAAAAAADUtmX5u1z8Knvy8Q201LZl+btc/Cp78vEMPQlDtLicg2d/cQfRZzW\nm20jH1kNPs8vyMH0YfNabhSMfWQ8UxDtS4s+jbn+kuC+hssh0p0GzyH6k6DWJDpToNnkP1J0CjeC\ndfmySW6WqFTIr5xbIUHtiLimhhiEWISohFiDdhn+/wCTz/ESO9CM8kxCM89Aw71CPfkZ5giEh5Hi\nD5YeoTL4jxCqqP6lLWIVVR/Uo94X2kKlfUopzd1lLOJyl3OJjrKSa6R3tjutCmnN3WUs4nnay6nP\npaynnEx1l5bjJalPObu9yFTN7pbTqY73IVUzul3QGG2KqawUq5rFS0m90q5pM67xcUC9tysmt0gx\ncSdNbpBi4lpS0LqjoY1GOHqMca7jQ6UMUY4eoxxS1zYhqjXDlGqVVYmhggohW1CaGiCiHFUJoRRB\nVEOWRkAADWZAAAAAVBBxtiiICoIgp0xMMcg5o1BzTtpEWOQcg1ByFnRIMc0egxo9pbUFuNbOufg7\nsK/6UhzZg63OSPg7sK/6UhzZg63PnPaf0pX+NlvR7C4AAAUJtAAAAAAAANbt3Gn4UHx8pO06nQJe\nFGjTkeoS8SZYjWNRzLkhxoaQ2Zn7Zyqu5chrdqqtGn7FT05MwPiseZoMzHiwPK+TfElHuVER6I5G\n570RyX50vLjZGsdGq7pLaVB8nClIyzESUWWhTcrOxW7VZdZqHFVFe2E5quRt916oqp5KGHZRgxYd\nl6wyPGSZitpE8kSOkNsBIjvi8TykhNVUZqRdww9CUO0uJyNZxU8TB9GHzWm4Un9SGkWWk4UOFBcy\nFDY5WsRXMY1rlTatXOqJnN1pa5/WQ8XxJLpSy72fRtbpdUs+5Gz079XuNnpy5vW9xq9O/V7jZqcv\nOToE+8E/EDZJFfO3i4QppLd3i5YLzeUxGxRbjDEIz0JTyNEG7DXuPP8AEERYhGiEmIR3j/hz0Ee/\n9ZHcR4hneYHj5YPQS70jRCqqP6lLZ5WVFOcPeGS85CncalDPYLrKSbTlLyeTHWUs4mOsd7bQ7bQp\nZ1vnaymm93WXc4mOspJzd1l7bjHasqZ3d3uQqZrdLad3d7kKma3S6oDDbFTN/SK2Z3dRZzKYlbNb\nuouKJfUGVUzulfFxLGYTEgTCZ94taRdUWYhijhqmK2h0oxuGqPcMUpa6NiGKNUcNUqqqNiGCDlGq\nVlRE0NEUcoinFNEhBo4RTmkjIgABraMgAACQAOEQU2xRgEHIJcKh0wMMVByDUHId1MixyDmjUHoW\nNFEGOQe0Y0ciFtRz9RBnXXwd+Ff9KQ5swdbHJHwdyIiWguzeVIc2YOtz5y2nz8p189emy2o9hAAA\nUJtAAAAAAAAA1LZl+btc/Cp78vENtNS2Zfm7XPwqe/LxDD0JQ7S4nHdnXfIwfRh81pt1Jx9ZDULO\nfuYPow+Rpt1LXP6yHi+ILzpcWfSNyv5S4I2in9Js1P8A1e41enLzvcbNTl5ydAo3iE2/RssiuO8X\nTCjk90u4QuT7Yj4ovNMbyNEJMQjRBrwyWh59iCI0QjPJLyNEPQMOegj361I7yO8kPMDx7w96CZeo\njPK2o/qXpLOIV0+3nD3hkl0kKVyt5RTiY6yjm93X7y9nd3WUk70jxbPcdFoUs79LWU04mOsu5z6W\nspZtMdZe24yWrKeeTHeKmabiXE7u7xUze6XdBjDbMqJvdKyZTEtJlMStmt3UW9EvbdlVMpiV8x0F\nlMJiV0ymfeLWky7oMjjVHjFJVVuOtDFGKPUapUV0bEMUYo9RpU1UTQxRFHKNUraiJoaog4acU0SQ\ngCqIc0kSGgOEuNTiAgqBcKCiAAAIbYoBRUEHIdMERYqDkGoOQ7aSIscg5BrRyFlRRBj2j0GNHtLe\ngiDOuPg78K/6UhzZg62OSfg78K/6UhzZg62Pm/an0pX+NlvR7C4AAAUBtAAAAAAAANa2Q7VOo8r8\nb+JTM9BY5PjCyz4DPi8JXNYsZ/j3t2zb3pmbeuZcxG2YnX2cra/XSZ1f5y0RTDszU2oTtJmJGmy0\nCZjTTUhOWYmvikOC1HNiI9XeKesTOy65E3bzDskxI7rK1Z01BZLR/wCiJ5IsBkb4wyGqS8RERsZG\nt26XIi4bph6EodpcTkWzq/IwfRh81pt1Kx9ZOg0iy0JWw4SrFivvay5r9ptUzNzptWIv+ZulKXP6\nyHjeJRylLfnvZ9JVs3SWay3I2mnrzk6DZqevOToNWp685Og2enrm9ZOgT7xCffo2SQXHeL6Dga/I\nLjvGwS+Ci3W3SEjE15oyIRYiEuIRXjLhjPPsQRGiEaISYhHiHoOHPQR79akZ5HeSXkd492EtBLvU\nRohAn0zJr6CwiIQp3BNY84bLzkKN0t5QzmC6/eUc4mOv3l9OJj6S9JSTiY6/ePdo9xO1ZSTqedrK\neb3dZdTiedrKabTHWX1uxktWU083HeKqabiW84mO8VU0mJdUGMNsymmt3eK6a3dRazSYlZNJjqLi\niy9t2VMwmJXTPQWcymJXzKY6i1pMu6DIajVHKNU3zW47UMcMUeo1Spro2IxqIo5RqlTWRsQxRo9R\nqlbURNDRFFUFOKcSQ1RBQuOaUTIgABryMgAAGQAKCAbIowKgoIKh0wRhioOaNQch3UokGKg9o1By\nFlRRBj0HINaPuLait3eQZ1v8HhhX/SkObMHWxyR8HelyWgxXypDH0Zj6jrc+a9qPSlfdl57Lij2E\nAABQG0AAAAAAAADUtmX5u1z8Knvy8Q201LZl+btc/Cp78vEMPQlDtLicZ2dX5GD6MPmtNtpS5/WQ\n0+zv7mB6MPmtNupbs/rIeOYgvOlxZ9L3C/lLgjaKeub1k6DZ6cvOToNWpy873GzU9ed7hRvEJ1+j\nZZLd3jYpZcy/9bhrciuO8bFLOzLvCzcaiRiS81ivI0QlPQjRC/w2R5/iCIryO8kxCO89Aw6Wgj36\n1IrzA9CQ8wPHywYl3qIzyHNpmTWTHoRZlOUeMPlvQoXiKKcTH0uko5pMdfvL+d3fS95RziY6/ePl\nm/NNdqylnU85PvKWbTHWXs4nnaymm93WMFuxjtWUs7u7xUzSecXE6hVTW6XVBjDbMppluJWzLcS1\nmkxK2ZTHUW9Fl7bsqZhMSumkx1FnMpiV8ymOotqTLugyudiNUyRcTGp2PeiwQxRimRRjisrxNiGK\nNUeoxSprI2IYoijlGqV1SJNDRBwinDOJIaog4RTmlEyIFwAa3EyFwAAKIAKgIKbIxMAKgIKh1QiY\nFQcg1ByHbSRFjkHINQehZUYkGOQegxEHoW9BGtnW3weGFf8ASkObMHWxyV8HjhX/AEpDmzB1qfM+\n1fpW4+NlzQ7C4AAALxtAAAAAAAAKm0tpJGmw2RJ6ZhSrIjvFw9veroj0ar1axjEVz7mtVVuTMiKq\nlDsrTcKYsxWI8CIyNBi0eciQosNyPhxIb5V7mvY5MzkVCv2Q3rJ1qj1WNLzUxIy8nVZKMspLxZ2J\nLzM4slEl4qy8u1z1a5krMQ9siZvGomDilZTY8pYOoQpiG6BEWmVeOku/M+XgzLpqYgS70TM1zIUW\nG1WphtbjD0JQ7S4nLtnF+Rg+jD5rTb6Wuf1kNHswyIkOCrojXN2rLmpD2ipmbi7bLf8AyN0pa5/W\nQ8hxGOUn697PpmtvpLNZbkbVT1zb/uNnpy5vWToNUp65t/3Gz09c3re4ULxCjfo2WRXHeNjlFzLv\nGsyK47xskmuZdaCvdLeJWIx3EiIRnoSnoRohb4ZI89xBEWIRnoSohGeegYdLQR79akZ5giISIhHe\nPlhITL1Ed6EaKnKSXoYIiDtYSE+9iUk61M/pKUk4mOsv55MfS95RziY6/eP1hLOJx0HvKOcTHX0l\nNOJjrL2cbjrKWcTHWMVuxhtZFLOtx1pyFTNJiXU61M+8VM0iZy6oMYbaRTTaY6ysmW4ltNJiVsy3\nHUXFFl9bsqJluJXTKchazLcStmegtaLLqgysj47xiJMdM+8RlO+OhaQe4Yo1UHqNU5K8TYjGo1R6\njVKmtE2IYo1R41StqRJoaogoinFOJIaoDlGnNKJkS4FFA1uJnMQLhQBQDMAQBxsjEwAqCIOQ6oRM\nAg5BEHIdtOJBioPQag5CyoxIscg9BqDv8i1orJd5rZ1t8HjhX/SkObMHWpyT8HhfdX71v8qQ+76M\nwdbHzDtW88VrvLLz2XVDsLgAAAvm0AAAAAAAADUtmX5u1z8Knvy8Q201LZl+btc/Cp78vEMPQlDt\nLicS2d/cwfRZzWm3Ulc/rIaZZx3yMLUzkabfS3Z09JOg8kxBec+LPqCuv5K4I2qnuzeshs9Pdzk6\nDVKeub1k6DZ6cub1k6BRvEJ9/E2eRXzt42ORXMutOQ1eQdjvGyyLsy605BWu0Jd/EsYiEaIhJeR3\nnbhsjz7EYkWIRnkqIR4iD/h09BHv46kV5HiEmIYIiD3YSEu9iRXmCISXkeIg8WEtBPvYlXPpmX0v\neUU43Mus2GeTMvpFFNt5R9w2WcSqpPKRRzjfO1lPNpjrL2cTztfSU023HWMtuy+tZFFOpjrQqptM\nd4u53d1oVM2mJd0GMNtIpZluJWzSY6i2mm4ldMtx1FvRZe28inmUxK2abyFtMtxK2ZbyFrRZd0JF\nVHTHURFLGYTHUQImJZU3uLak80Y1GKhkGKRqxN6GKNVB6jVKqrE2IYo1RyiKVtSJJDFEHKJccU4E\n0NUBRLjmlAyJcFwoGromcxLguFAyogAIFwpsjEwA4RByHVCJFgg5oiDkO2lEixUHIIg5CyowIMcg\n5BEFLWkskQZ1r8HjhX/SkObMHWpyV8HjhX/SkObMHWp8t7Welrj/AOki7odhcAAAF02gAAAAAGs1\nmu1ODHfDgUSYnITbtpMMnpGC2JeiKt0ONER7blzZ03AA2Y1LZl+btc/Cp78vENZ2S4MN8ezVQmIL\npKe/piRguhPmdssGDEWMsSE7xMTxUS9VzuRF3M5s2zIt9na2qZ/6qnv5fF4hhkodpcThyzjvkYXq\ncjTb6Uuf1kNGsvGesOGjoe0bc2522a6/M3cTOhulKdn9ZDyrEYZSf/J9RzalQi1+Vfp9Ta6e7N63\nuNnpzs3rJ0Gp093ONnp7sPS9woXkRSv4mzyLkz7xssgtyLrQ1WSdjvGyyLsy6xWu4iZfxLq+8wPM\nrDG8MPlkef4lDeRYiEeISYhHeP8Ah09BGv46kV5giEh6GB6D3YTEy9iRXoYIiEl6GCIg8WExOvYE\nGcbm3yinEx9L3mwzCZt8optMfSUesLnuyKHSRRzrfO1lNNtx1l9ON87WU023HWNdvIubWRRzqY7x\nUzSecXc63HWhUzbU8ouqDGG2kUk0mJWzSYlxMtxKyZbiXFFl9byKeYTErppOQtpluO8V003Mpa0Z\nF1QkVUduOor47VvUtYzcdRAjtx1FlSkW9GRDGqPUap0SWaOxDFGqPUapXVok0Y1EUeo1StqQJpjB\nFHqNOKcCSG3CDlA5pQJZjQuFuC419ABLgFuC4FABBUFA2RiYBBQHIdMIGGCIOQQch3U4EWKg5EER\nByFlRgQY5BUEQcn3Jf8Adgd/ZWZBnWfweX+//SkObMHWpyV8Hnf/AKwXpd5Uhmx+jMbqHWp8rbVS\n6WK13+9l3Q/prgAAAvm4AAAAAAAAorS2NpFTcx9SpdNqL4SK2E+ek5eadDaq3q2G6OxVYl+fMVmy\n/CayzdZYxrWMZSZ1jGNRGta1ss9Gta1MyIiImb7jcDU9mX5u1v8ACp78vEMMlDtLicI2dd8lC9Xk\nabfS3Z/WToNLs+/5OF6vI02+luz+sh5fiEfOfFn1S1nbx+FfQ2unOzet7jZ6e7nJ0Gp052b1k6DZ\nqe7ne4UbyIp38TaZF2O8bJIOzLrQ1aRdjvGySDs2+gq3cRMvomwwFxEeNllx1IPeclm8pCHikPOI\nsRCNEQlREI7x7w6egiX8dSK8jvJLzA8e7CQl3sSM8jxCS8jxEHiwmJ99EjRkzb5SzjcfS95ePQqZ\n5uPpe8eMLqbxaqrKRQzjfO1lNONx1l/ON87WUs23HWONvIsLWRSzrcdaFRNt84vJ1uOtCom2+cXV\nBjBbSKSbbiVsw3HUXE03ErJluOot6Mi+oSKeZbiV0y3kLaZbiV0yzkLWjIu6Eiqjt5CBHbjqLSO3\nHUQI7cdRZ0pFtRkVkZOQxkiYbyEdTui9xZReaGqg1R6jVNFWBNDFGqPUaVtSBNMao24eNOKcCSGh\ncOuEOeUCQ0BQNXQDMQBQM9AMwuAUW4nGACIOQLhUQ6oQI5iogqAgqIdtOBFioOQREHFlSiQYqGWC\n3AxtQkwG4G2T3GubyR1b8HzjaD0qfzJg6yOTvg+/OtB6VP5kc6xPlfav0rX+Nl7bf0o8AAAF43gA\nAAAAGs1m3lKk4z5eYmXQ40O7bsSWm4iJtkRyeXCgq1cypgoAbMansy/N2t/hU9+XiFDsk1uaZJsq\nlNq0SGkVkJlKpbZKDEbVJ2I5fFwIqTEP4yqPzJ5Ct2qNc5VuQudltzls1WFeiNetInFe1M6Nesq/\nbNRd1EW8w9CUO0uJwXQneRC9TkabfSnZ/WQ0ShR2uSEiOvVNpelyp9X1obtSlz+sh5tiMMmz6poS\nU7WLTz3L6G1092b1k6DZ6c7N63uNTp7ud7jZ5B3O9woXkRbv4m0STsd42WRdmXWhqkk7E2SRdmXe\nFa7iJl9E2aUXHeJL0IUkudd4nREKii8piLikN5FiEZ6EuIRoiDrh1TQQ7+GpFeR4hJehgePdhPQT\nL2BFehgehJeYIg8WE9BOvYEZ5XzzM3re8sXoRJtubfHTD6m9CtcxyZr863HWU02zHWX863ztZSzj\ncdY72ktyJ2sijnW460Kqbb52Yu51mO8VU03EvaEhgtpFHNNxKyZbiXM03ErJpmOot6Mi+t5FNMtx\nK6ZYW8wzErppvIWtKRdUJFTHbjqK+O3EtpluOor47MSypSLejIrJhvIQ3oWUdvIQoreQsKci0pSI\n4iiqIbWszoQxUEVB6oNU4qkCSYwRR6oNOKcCY24QdcBzSgZGqglw64S41OBnMS4VEFuC4yoBmIKg\noXGyMDACoAqHTCBHMW4cgiDkQ7qUCLFQUBWpediWSIsfBTOTILcDDLt6SYxURL1zJqv5DRVmks2c\n1WR1L4ACeXaD0qfzJg6uOUfAAcivtBdn8qn7ip9CY+s6uPlraiSlildrf57GK1/pR4AAAUJ0AAAA\nAAAAGnWnsE2dqEKpJUqrJTMGXdKwElXyboMFj120V8KFOysVIcV+ZFe3OqNRMB+zC26zlaS9XXUm\ndTbOu2zlSWel63IiXr9xtxqezL83a3+FT35eIYehKHaXE8+qQ7yYXqciG30h33/SToNLpK+TD9Xk\nQ2ujP5ydB55fx1PqmyedtFftX0Nvp7ucnQbRT3c73Go05+b1k6DaKe/ne4ULyJSX8TaJF2O8bJIu\nzLrQ1WRdjvGySLsy60Fa7iJl9A2iQdnXeLRc5SSLs67xdM3Sgl5sxHxOnuMMQjvJURCM9Brw6poI\nd/DUivQwPQkvI70HuwqCXewIzyPEQkvQwRB4sKgn3sCM8jR23pvkt5geg52NQU7yG8pJ1nnaymm2\nY6zYZ5vnaylnGY6x4sKmcTjoyyZQzrMd4qZpmJezjEz7xUzbMRhoSL62mUU0zErZluJdTTMSsmW4\n6i4oyL23mUsy3ErpluJcTDMSumm8haUpF3QmVEduOor47cdRbx28hXx24lnSkW9GZVRm8hDis5Cz\nmG8hDis5CwpyLSlMrIjbhhLjM5CM5p1xeZ3ReYxRqjxFQxKOZMYolw5UEOOdMkmNEHCXHNKmSzEu\nEuHXBca+rM5jbguHXBcHVhmIKiCogGyNMxmCIKgCodVOmRbFQVAQU64xyItghlhNwGMQkwmYGZPI\nhOWRlgMJkBmBigNwJsFmBx1JHBVmdN+AQnyloNdP5swdVHLHgGp8raD+Hc2YOpz5g2n9J1/jY02T\n/kx4AAAUJ1AAAAAAFRP2npsvEdCj1CnwIrbtvCjTcCFEbel6bZj3orcy7oAW5qezL83a3+FT35eI\nUmypbWZpsvDqElOUiJKuhbeBLxoMxMRKnHRy3QJaelYyQpZrkWG1Hua5L3Z8yFrstRFfZmsPc3aO\nfR5t7mXo7aK6VeqtvTMtyrdf9xh6Eo6o896U7yIepORDZ6I/nIapS3eQzUnIhslFfn9ZBDvY6n1J\nhU+lQS/RfQ3Knvzet7jZ6e/N63uNQp7+cnQbRT3873CjeROLEIG0yL8d42WQdmXWhqci/HeNlkH5\nl1oK13ETL6BtMg/Ou8XsuuP/AF9Zrcg/Ou8X8s7HeFq4WTEvEKeaZlehGehKehHeXmHVNBCv6epF\nehHiISXoYHoPdhUEu9pkV6GCIhJehgiDxYVNBOvaZGehgeSXoYHoOVjUFO8gV06y9F1oUs2zHWbF\nMtvapSzcPHWO+G1d2RS6SKGdYmfeKmbZ5xfTrMdaFTNs84aKEy3tplDNMxK2ZZjqLqaZiVs0zHUX\nFGZe28yjmWYlfNM5C4mWYldNMxLSjMuqEyojsTPqK+OzEt47OQgR2Y6izpSLejMqZhnIQorOQtZi\nHyEKMzkLCnItaUysitIsRhZRWchFiMOyEywpzICgZYjDEqHSmdSeYlwg4QhKGZnMaJcOuEuNEqZL\nMbcLcLcFxr6sMxtwtwtwXAqYZiCi3BcbVTDMLhUQBTfGORHMBWoCIZYTDLeRFvIdCZhmJcFmAyEz\nAlQmYHPOZy1JmSAzAmwGYGKXZgTYDMDhqTK6rM6R8BJLo1oP4dzZk6lOXfAXS6NaDVTubMnUR80b\nTek6/wAbHKwf/jw4IAACiOwAAAACvm6HJRXrEiycpFiO86JEl4T3uuzJe5zVVSwAANQthZSbnYUS\nTl6hCp9Ojy6ykeUh0+DGiJDiI5kVZWM56NgOcx6p5THXXXohi2VJRkCy9WgQ79pBo03BZtl2ztpD\nlHsbtnLityJnN0NT2Zfm7W/wqe/LxDDMx1R5y0ljUaxUREzJyIbLSHZ09JDWaYvkM1JyIX1Ld5Tf\nSQSrxZ5n01gjSpRS3bl9Dcqc7ne42inPzet7jUKe/N63uNnpz+d7hSvInRfwNqkn47xskg7Mu8an\nIvx3jZZB+Zd4VruImX0DaZBc67xsMo7He6TV5F2dd42GSf5290izdRE6+gWriPEQzot5iiIdFhUy\nEHEKepEehgeSXoYIg9WFQS72BFeYIiEl6GCIg72FQT72mRnoYHoSXoYHoOdjUFK8pkaIhVTzPO1l\nw9CvnWKqLrHLDqu8XK0cma/Osx3iqm2JnL2dh47xUzcPEcbaeaR020yhmm47xXTLMdRdTTMSsmWY\n6i5ozL23mUkyzErplhczLMSummY6i1ozLuhMp47MdRAjsx1FvHh46ivjw8SypSLajMqphnIQojOQ\ntY7OQhRWch305lpSmVcZhFiMLKKwixGHdCZY05lc9pGewsYjCO9v3HXGR2wmQrgMzmbxiVptTN6e\nYggoGSQlwlw4DHRQZjbhbhQDooMxBQBEMgAqIKiGSHDMNkW8ghsJEJgQ4ZIgsNM5HPOYsJuBKhNw\nGw2YEuCzA5KkjiqTMkBpKZAa5LnIiouKKNgMJkFmBw1WnuZX1amWh0L4C8JrI1oGtRGp/Vy3Jmzq\n2Zz/AOR1EcxeBCl0xX/RpvNmTp0+bto0liNZL87HvDnnbQf6IAAClO0AAAAAAAADU9mX5u1v8Knv\ny8QybIdtpWiQYcWYZHmHRYrIcOXlWsfHVivYyLMKkRzWtgQ0iNc5yruoiXqqIYtmRf8AV2t/hU9+\nXiGGZjqjzgpi+Sze5EL2nv8AKT0kNdprvJZvciF5IuzprQULqO9n0ZglVdCO/wBS+ht1NiZvW9xt\nFPfzvcabSImZfT9xtdOfm9b3CtewL69SaNpkX47xssjEzLvGpyDsd42WRdmXWgrXdN9wnX0UbRIx\nM67xscm/zt7pNNoU4kVY1zVTxUZ0Bb896w7r3J9SeV/kbTJOXPvdItXtGUXk0J14k9DY4GH8hrxJ\nV2b+Q96HFaNqWQjYlT3sivQjvQlPQjvQdrCbEq9pkV6GCIg2POokzDltqquiQI0wj9xEgRIENWqn\n1r8YRfVUyPQeLGbWQn3tJ9xGehgehJehgeg42NQU7yk+4jvQjTLcy7xLehgiNG+xqCxdUnnoUU8z\nOu9yFTNMxLm0EZIMNYiork28FlyLd+9iMhIv83p/IgTcPzh0sq6ayOelGUcnlue7ll9ygmmYlbMw\n8S7moeJWTMPHUX1GoXFvJlJMsxK6ZZyFzMsxK6ZhlpRqLvLuhJlNHZjqK+OzEuo8PHUVd6P292ba\nvcxfvVuZVLGnWimlnqW9BvLPIrY7eQhRWchazEMhRWchY06i7yzpSKuMwixYZZxWchEfDO2FRd5Y\nU5srXwzBEhk+K0ixE8pG3YtVf5KidJ0qtFas7qcmyG5hhcwmuYYnMOqNRd50xmQnQ7hqtJasGLDv\nNiqLvNymRrguMqsGPbcl+pP5qidJmVWMVm3uRNPMZcLcZPFjkhmesj3h0jEjRzWGZsMe1hF1F3kH\nMYxhlYwcyGZ4cM1SqrvNM5jYbMCTCYNlrnIi4X//AJ0EqFDOZ1oyWae5nLUkxYcPAlwoeAyEzAlQ\noeBzVKi7ziqSMkvDJsFuBjgsJkCHgcNSou8rqsj754EqXTNf9Gm8k0dNHNHgWJdNV/0KbyTR0ufP\nG0TzxCt8bPRML/8AVp/CgAAKUsAAAAANYrVi4M1HfHdPVuC5918OUq09KwG3Jd5ECDFRjMNxDZwA\nD5JslbFU1NQJl9Pq9UbHiScpIsl5h8nNMdBlphsdyrNz8vEjtc5VV7lR+dYTL8D6NU6JDm6fFp82\n+LMQ5iWdKTMW9sKLGZEZ4uI++A1rWPcir5qJjgWcRVRFVE2yoiqjb7tst2ZL1wvNUgV+sue1rqAr\nGK9Guif0pKO2jFdc6JtEbe65M933ABoLPBesg25ElJ77v6ynNzd/eGRvgy2TTCWn0/iU51hXytWn\nIlrKTNTtOrMvGjrV5OBBeyH8Ul5BjYDYKsVkwrYquVvjokRW3p41rUTyT7uQdOL1SOmN7XjpUkv+\nWfHWeDbZdMINRTVU51P+YZE8HWzSYNqqaqtPJ/zT68BB29N+yuSNjxK697L5n9z5K3we7PJh/S6f\nxeodaZm7AtBTB9ZT+MVDrT6oa3W6xVYUZzJajLOwURFbMf0hLS+3VUvVPFRW7Zty5iLtKL1guSIO\n+uHrUlzZqMHYKoUO/axK03buV7rqzUE2z1uvcvyudcyEhuwtSEwmK77ZqHWlfsySCTlMfNxpOkS9\nRgScZ0RKhO3TFOgoj3NiyUxL+SkdHIrmuzZ7kvPo1kZjx1PkYqLGckSTloiOmE2sw5HwWO20ZNyK\nt96/eqkXY271px5I1u4qP2nzNNTYdpiYTVeT+NVDrR37H6Z9rr/tuodafRAI+Trb3UeSNbk3q8z5\nz+xyl/a6/wC26j1oi7DVL+1V/wBt1Hrj6OV1oJuZgwdvKSnx+Ltmp4jx8OW8lb9s/wAbFRW5s2b7\nySsqC0px5I1uEXqjRHbCVHV6RFmK6r2tcxr1rVR2yMerXPai+OzIqsYvqoO/YvSV/wDE15f43Ueu\nLSfqj48rNpXqaymUxku6LMzEWowYsJWMVFVj0l9q5EVL93PddukPYYp3i21CagQVkKfPR4MamUtX\nLfKy8OCkNZh8C9UlHzDk8Z4pMERt/lKpsVvSWkVyRrdvSesVyRG/YpSPtFe9t1Hrg/YnSPtFd9tV\nHrT6WBsUIrREHZUH/bjyR80/YnR/7+ue2ah1ofsSo/8Af1v2xP8AWn0sbFcqNcrW7ZyIqtbftdsq\nJmbeuF67pNNrQg8Ptn/bjyR8wmNgqhxE2r4lZel7XXOq8+qXscjmr+9xRyIu8C7BdDX+0rC/xee6\n02SWr1ZdEY19BWHDc9rXxf6UlH+LYrkR0TaI291yXrcn1Gv2YlJOVtfVWy/i4bpikyUeO1IquWJM\nunJ3buVr3Lc+67Mn1IbFWqLST5h5Ptvdx5IwO2BqCuLqwv8AFp7rBq7AFn1xWr+1p7rT6sBL+KrL\n23zZlWNuv7ceSPky+D3Z1cUq3tae60Yvg8WbX6NV9qz3Wn1wCX8ZX95LmySs6K9iPJHyFfBzsyv0\nKp7VnutMTPBtssl90KpZ1Vy3VWezuXFV+VxN82WJmYg0KrxpRXtmYdOm3y7od6xGxWwXq1zETOrk\nxTUaZsay8lK1xsvSHtdIxrPS87OthRnRoSzjplGyk3EvcqNmY0JZlXOxd4pFW+4z/HXHvJc2SVtS\nXsrkiMvg2WW/uan7VnutGr4NFlf7mpe1Z/rT7KBLyhc+9lzZJUKa9lcj4xkzWU/uKl7VnutEXwY7\nJ/Z6j7UnutPtAGfKV172XzMz1MPyo+LZMNkvs1Q9pz3Wjcl+yF9/xWfvRNJzt9y7n73A+1nzGclZ\nSWtnIxISw4cabpFUdNr41VdGiQpmmNgbdjnZlRr33IifScHlK697L5n9zPVR7kUeS9ZH7LP+053r\nBMl2yH2Wf9pTvWH2sDPlO799P5n9w6uPcj4nkuWQ+yT3tKd6wMlyx/2Se9pTvWH2wDPlS799P5n9\nw6uPcfEslyx/2Se9pTnWCO8Fuxy5llJ32lObn/yH24+UbM9OkJuMklLwob7QzcBGyk3457H0WXY5\nbqq56O/0ZGOcqtRud6tRudEW7DxS7e51p/M/uHVx7iqyW7H/AGSe9pTvWBkt2P8Ask97SnOsPtMF\nqo1qK7bqjURXLi5US5XLd9eO+PM+VLv30/mf3Dq49x8TyXLH/ZJ72lO9YGS5ZD7JPe0p3rD7YAeV\nLv30/mf3Dq49x8UyXbIfZZ/2lO9YGS/ZD7LP+053rD7XcVtppWXjSsWDNNgPgxERjmTLtpAe5XIk\nJkV1/mq/aJd99xjynd+9n8z+4dXHuR8lZ4L9kETNKz6J91Tnbv8A7R6eDDZL7NUPak91pcbBbPET\nFek1bLQll52WckrTor49JlWxpOGqQ5J8S50OI7aK+JDuS5YiKieUfUTHlK6X92XzP7h1UO5HxfJj\nsn9nqPtSe60XJlsp/cVL2pPdafZwDylde9l8zMdTD8qPjTfBpsqmEGpe1Z/rR6eDZZdP7Kp+1Z7r\nT7ENetyKtyrcircmK3biX7pjyhc+9lzZjqKf5VyNM2NdjGk2edNOprJljptISR/jE1Gmr0gbbxe1\n8e5Vb57sPrN1Pg1l6rORLXU+YnpGsS01OyFUhugx2Q0k5OWhRZb4rDhbSOqOa1u2V8W69XTCfRuu\n+8nLKbk85PNs2JJLJAAARMgAAAABzNlq2V0faTgtO7xDLVsro+0nBad3iAHTIHM2WrZXR9pOC07v\nEMtWyuj7ScFp3eIAdJxZWE6JDiuhw3RYW3SDFcxqxISRERIiQ3ql7NsjWot31IZjmbLVsro+0nBa\nd3iGWrZXR9pOC07vEAOmQOZstWyuj7ScFp3eIZatldH2k4LTu8QA6ZA5my1bK6PtJwWnd4hlq2V0\nfaTgtO7xADoSrWbp03Fhx5qQkZqNB/cxpiWgxosK5b08XEiNVzM+fMWqIczZatldH2k4LTu8Qy1b\nK6PtJwWnd4gB0yBzNlq2V0faTgtO7xDLVsro+0nBad3iAHTIHM2WrZXR9pOC07vEMtWyuj7ScFp3\neIAdH1Sny81BfLzUCDNQIiXRIExDZGgxEvvRHw4iK1yXomKbhFs/Zyn05IiSEjJSCRVa6MknLQZZ\nIrmIqNdESC1NuqIq3X/Wc9ZatldH2k4LTu8Qy1bK6PtJwWnd4gB0yBzNlq2V0faTgtO7xDLVsro+\n0nBad3iAHTIHM2WrZXR9pOC07vEMtWyuj7ScFp3eIAdMlHCshSWTXx5lMprJ3bui/HWycu2b8a9F\na+J8YRm326oqoq37p8Cy1bK6PtJwWnd4hlq2V0faTgtO7xADpkDmbLVsro+0nBad3iGWrZXR9pOC\n07vEAOmQOZstWyuj7ScFp3eIZatldH2k4LTu8QA6YVL8y50XMqLgqfUpBo1Fk5JHtk5SVk2xXrFi\ntlYEOAkSIuMSIkJqbd33qc65atldH2k4LTu8Qy1bK6PtJwWnd4gB0yBzNlq2V0faTgtO7xDLVsro\n+0nBad3iAHTIHM2WrZXR9pOC07vEMtWyuj7ScFp3eIAdMlHM2QpMWa+OxKZTYk5t2xPjj5OXfNeM\nhoiMf8Yczb7ZqIiIt+4h8Cy1bK6PtJwWnd4hlq2V0faTgtO7xADpkDmbLVsro+0nBad3iGWrZXR9\npOC07vEAOmQOZstWyuj7ScFp3eIZatldH2k4LTu8QA6ZKKuWOpE9F8fO0umTsbatZ4+bk5eYi7Ri\nqrGeMisV21RXOVEv3VPgeWrZXR9pOC07vEMtWyuj7ScFp3eIAdLw2I1Ea1Ea1ERGtREREREuRERM\nEuQcczZatldH2k4LTu8Qy1bK6PtJwWnd4gB0yBzNlq2V0faTgtO7xDLVsro+0nBad3iAHTJGqchA\nmoT4EzBgzMCIiJEgTENkaE9EW9EfDiIrXZ0Rc6bhzflq2V0faTgtO7xDLVsro+0nBad3iAHRtHpU\nrJwkgSkvLykFFVWwZaFDgQkVcVSHCRGopMOZstWyuj7ScFp3eIZatldH2k4LTu8QA6ZA5my1bK6P\ntJwWnd4hlq2V0faTgtO7xADpkDmbLVsro+0nBad3iGWrZXR9pOC07vEAOknykJ0RkZYcNYzGuhw4\nysasVjIitV7GRFTbNaqtbeif+lDOczZatldH2k4LTu8Qy1bK6PtJwWnd4gB0yBzNlq2V0faTgtO7\nxDLVsro+0nBad3iAHTIHM2WrZXR9pOC07vEMtWyuj7ScFp3eIAcAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"400\"\n",
       "            height=\"300\"\n",
       "            src=\"https://www.youtube.com/embed/jpmGxOB2YPo\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x103f77470>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo(\"jpmGxOB2YPo\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the line $y=2x+3$. See below for a light introduction to plotting and numpy arrays. Numpy arrays are really important to understand. If you have experience with Matlab once you take out the `np.` part it should be familiar to the relevant Matlab function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fba0c569860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-5,5,num=100)\n",
    "y = 2*x+3\n",
    "\n",
    "plt.plot(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is how you define a function in Python. Remember to return the value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def f(w,b):\n",
    "    \"\"\"\n",
    "    We will limit ourselves to a linear function\n",
    "    \"\"\"\n",
    "    return w*x+b\n",
    "\n",
    "def loss_function(w,b):\n",
    "    \"\"\"\n",
    "    Loss function (squared error)\n",
    "    Note that w and b are the ONLY variables\n",
    "    \"\"\"\n",
    "    e = y - f(w,b)\n",
    "    return np.mean(np.square(e))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Find the function\n",
    "\n",
    "Given the observation $x,y$ the goal is to find the best parameters, $w,b$ that fits the data. Ignore the fact that you can solve this as an equation. Most of the time the data isn't as linear or noiseless as what is being presented here.\n",
    "\n",
    "The most naiive way of finding $w$ and $b$ is to do a grid search over $w$ and $b$ for the smallest loss function value. In this case the loss function is: $$\\frac{1}{N}\\sum_{i=1}^N \\xi_i^2$$ where, $\\xi_i = y_i - f(x_i|w,b)$ and $f(x_i|w,b)=wx_i+b$.\n",
    "\n",
    "Another way of stating the above is that we need to find the best fitting function $f(x_i|w,b)$ such that we minimising the __loss function__ by varying $w$ and $b$. An illustration is shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -7.        ,  -6.7979798 ,  -6.5959596 ,  -6.39393939,\n",
       "        -6.19191919,  -5.98989899,  -5.78787879,  -5.58585859,\n",
       "        -5.38383838,  -5.18181818,  -4.97979798,  -4.77777778,\n",
       "        -4.57575758,  -4.37373737,  -4.17171717,  -3.96969697,\n",
       "        -3.76767677,  -3.56565657,  -3.36363636,  -3.16161616,\n",
       "        -2.95959596,  -2.75757576,  -2.55555556,  -2.35353535,\n",
       "        -2.15151515,  -1.94949495,  -1.74747475,  -1.54545455,\n",
       "        -1.34343434,  -1.14141414,  -0.93939394,  -0.73737374,\n",
       "        -0.53535354,  -0.33333333,  -0.13131313,   0.07070707,\n",
       "         0.27272727,   0.47474747,   0.67676768,   0.87878788,\n",
       "         1.08080808,   1.28282828,   1.48484848,   1.68686869,\n",
       "         1.88888889,   2.09090909,   2.29292929,   2.49494949,\n",
       "         2.6969697 ,   2.8989899 ,   3.1010101 ,   3.3030303 ,\n",
       "         3.50505051,   3.70707071,   3.90909091,   4.11111111,\n",
       "         4.31313131,   4.51515152,   4.71717172,   4.91919192,\n",
       "         5.12121212,   5.32323232,   5.52525253,   5.72727273,\n",
       "         5.92929293,   6.13131313,   6.33333333,   6.53535354,\n",
       "         6.73737374,   6.93939394,   7.14141414,   7.34343434,\n",
       "         7.54545455,   7.74747475,   7.94949495,   8.15151515,\n",
       "         8.35353535,   8.55555556,   8.75757576,   8.95959596,\n",
       "         9.16161616,   9.36363636,   9.56565657,   9.76767677,\n",
       "         9.96969697,  10.17171717,  10.37373737,  10.57575758,\n",
       "        10.77777778,  10.97979798,  11.18181818,  11.38383838,\n",
       "        11.58585859,  11.78787879,  11.98989899,  12.19191919,\n",
       "        12.39393939,  12.5959596 ,  12.7979798 ,  13.        ])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-5.        , -4.8989899 , -4.7979798 , -4.6969697 , -4.5959596 ,\n",
       "       -4.49494949, -4.39393939, -4.29292929, -4.19191919, -4.09090909,\n",
       "       -3.98989899, -3.88888889, -3.78787879, -3.68686869, -3.58585859,\n",
       "       -3.48484848, -3.38383838, -3.28282828, -3.18181818, -3.08080808,\n",
       "       -2.97979798, -2.87878788, -2.77777778, -2.67676768, -2.57575758,\n",
       "       -2.47474747, -2.37373737, -2.27272727, -2.17171717, -2.07070707,\n",
       "       -1.96969697, -1.86868687, -1.76767677, -1.66666667, -1.56565657,\n",
       "       -1.46464646, -1.36363636, -1.26262626, -1.16161616, -1.06060606,\n",
       "       -0.95959596, -0.85858586, -0.75757576, -0.65656566, -0.55555556,\n",
       "       -0.45454545, -0.35353535, -0.25252525, -0.15151515, -0.05050505,\n",
       "        0.05050505,  0.15151515,  0.25252525,  0.35353535,  0.45454545,\n",
       "        0.55555556,  0.65656566,  0.75757576,  0.85858586,  0.95959596,\n",
       "        1.06060606,  1.16161616,  1.26262626,  1.36363636,  1.46464646,\n",
       "        1.56565657,  1.66666667,  1.76767677,  1.86868687,  1.96969697,\n",
       "        2.07070707,  2.17171717,  2.27272727,  2.37373737,  2.47474747,\n",
       "        2.57575758,  2.67676768,  2.77777778,  2.87878788,  2.97979798,\n",
       "        3.08080808,  3.18181818,  3.28282828,  3.38383838,  3.48484848,\n",
       "        3.58585859,  3.68686869,  3.78787879,  3.88888889,  3.98989899,\n",
       "        4.09090909,  4.19191919,  4.29292929,  4.39393939,  4.49494949,\n",
       "        4.5959596 ,  4.6969697 ,  4.7979798 ,  4.8989899 ,  5.        ])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_function(2,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_function(2,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "w_try, b_try = np.meshgrid(np.linspace(-5,5), np.linspace(-5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ],\n",
       "       [-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ],\n",
       "       [-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ],\n",
       "       ..., \n",
       "       [-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ],\n",
       "       [-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ],\n",
       "       [-5.        , -4.79591837, -4.59183673, ...,  4.59183673,\n",
       "         4.79591837,  5.        ]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w_try"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-5.        , -5.        , -5.        , ..., -5.        ,\n",
       "        -5.        , -5.        ],\n",
       "       [-4.79591837, -4.79591837, -4.79591837, ..., -4.79591837,\n",
       "        -4.79591837, -4.79591837],\n",
       "       [-4.59183673, -4.59183673, -4.59183673, ..., -4.59183673,\n",
       "        -4.59183673, -4.59183673],\n",
       "       ..., \n",
       "       [ 4.59183673,  4.59183673,  4.59183673, ...,  4.59183673,\n",
       "         4.59183673,  4.59183673],\n",
       "       [ 4.79591837,  4.79591837,  4.79591837, ...,  4.79591837,\n",
       "         4.79591837,  4.79591837],\n",
       "       [ 5.        ,  5.        ,  5.        , ...,  5.        ,\n",
       "         5.        ,  5.        ]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b_try"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fba08f47e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "w_try = np.linspace(-4,4,num=100)\n",
    "b_try = np.linspace(-4,4,num=100)\n",
    "\n",
    "w_try, b_try = np.meshgrid(w_try,b_try)\n",
    "e_obs = np.zeros((100,100))\n",
    "\n",
    "for i in range(100):\n",
    "    for j in range(100):\n",
    "        e_obs[i,j] = loss_function(w_try[i,j],b_try[i,j])\n",
    "        \n",
    "plt.pcolormesh(w_try, b_try, np.log(e_obs)) #using log here helps visualise better, you may take it out\n",
    "plt.xlabel('w')\n",
    "plt.ylabel('b')\n",
    "plt.title('Mean Squared Error')\n",
    "plt.show()        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can see that the error in the plot is minimised at $w=2$ and $b=3$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "355.06060606060601"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e_obs.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0043879944910451526"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e_obs.min()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Algorithms try to be a bit smarter by following the gradients to find the minimum. Remember we can only influence the error via the weights (and bias) `w,b`.\n",
    "\n",
    "## Maths (optional - no really)\n",
    "\\begin{align}\n",
    "\\mathcal{L} & = \\sum_{i=1}^N (y_i-f(x_i,w,b))^2 \\\\\n",
    "\\frac{\\delta\\mathcal{L}}{\\delta w} & = \\sum_{i=1}^N 2(y_i-f(x_i,w,b))\\frac{\\delta f(x_i,w,b)}{\\delta w} \\\\ \n",
    "& = \\sum_{i=1}^N 2\\xi_i\\frac{\\delta f(x_i,w,b)}{\\delta w}\n",
    "\\end{align}\n",
    "where $\\xi_i$ is the error term $y_i-f(x_i,w,b)$ and \n",
    "$$\n",
    "\\frac{\\delta f(x_i,w,b)}{\\delta w} = x_i\n",
    "$$\n",
    "\n",
    "Similar expression can be found for $\\frac{\\delta\\mathcal{L}}{\\delta b}$ (exercise).\n",
    "\n",
    "Finally the weights can be updated as $w_{new} = w_{current} - \\gamma \\frac{\\delta\\mathcal{L}}{\\delta w}$ where $\\gamma$ is a learning rate between 0 and 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo(\"EvnpoUTXA0E\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Scikit learn is another Machine Learning that is quite powerful on itself. However it may not scale to millions of data points same way that DL does.\n",
    "\n",
    "## Noisy Data\n",
    "We see how to find the weights using scikit learn below. However, the data isn't as perfect as before. We add a tiny bit of noise."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb9fe0a2198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.random.randn(10,1)\n",
    "y = 2*x+3 + 0.1*np.random.randn(10,1)\n",
    "\n",
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.0710438 ],\n",
       "       [-1.63204099],\n",
       "       [ 0.61393732],\n",
       "       [-0.72602171],\n",
       "       [ 0.56296216],\n",
       "       [-1.19009865],\n",
       "       [ 0.21120869],\n",
       "       [ 1.11886921],\n",
       "       [-0.21082568],\n",
       "       [-2.44257088]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = LinearRegression() # \n",
    "model.fit(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.00976455]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3.03645155])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 43.2317426]])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict(20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Note:\n",
    "1. `model.fit(...)` and `model.predict` will be two of the most important functions you will use all throughout. Worth remembering!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "43"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2*20+3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb9fd900ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_test = np.linspace(-3,3)\n",
    "y_pred = model.predict(x_test[:,None])\n",
    "\n",
    "plt.scatter(x,y)\n",
    "plt.plot(x_test,y_pred,'r')\n",
    "plt.legend(['Predicted line','Observed data'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A more complicated function\n",
    "Remember that when we say linear regression it mean linear in the parmaters $w, b$ not $x$! See illustration below:\n",
    "\n",
    "\\begin{align}\n",
    "y = b +w^T X \\\\\n",
    "X = [x\\quad x^2\\quad x^3] \\\\\n",
    "y = b +wx +w_2 x^2 +w_3 x^3 \\\\\n",
    "\\end{align}\n",
    "The shapes of the matrices are:\n",
    "- X = NxD matrix\n",
    "- y = Nx1 vector\n",
    "- w = Dx1 vector\n",
    "\n",
    "Note in the example below that there is no $x^2$ term. i.e. it's coefficient is zero!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ni4h4if8HltgRSiWyMt8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb9fd87e278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-5,5,num=100)[:,None]\n",
    "y = -0.5 + 2.2*x +0.3*x**3+ 2*np.random.randn(100,1)\n",
    "\n",
    "plt.plot(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 1)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 4)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_new = np.hstack([x,x**2,x**3,x**4])\n",
    "x_new.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 1)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = LinearRegression()\n",
    "model.fit(x_new,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  2.22229669e+00,  -1.39017445e-02,   2.96369412e-01,\n",
       "          2.16217922e-03]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Note:\n",
    "- The coefficient of $x^2$ and $x^4$ is really close to zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.65870273])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nH0lUGwCyn/YGAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb9fd8ec588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_pred = model.predict(x_new)\n",
    "\n",
    "plt.scatter(x,y)\n",
    "plt.plot(x_new[:,0],y_pred,'r')\n",
    "plt.legend(['Predicted line','Observed data'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  -5.        ,   25.        , -125.        ,  625.        ],\n",
       "       [  -4.8989899 ,   24.00010203, -117.57625742,  576.00489747]])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "poly = PolynomialFeatures(degree=4,include_bias=False)\n",
    "x_new2 = poly.fit_transform(x)\n",
    "x_new2[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 4)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_new.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  -5.        ,   25.        , -125.        ,  625.        ],\n",
       "       [  -4.8989899 ,   24.00010203, -117.57625742,  576.00489747]])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_new[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "latex_envs": {
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 0
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
